package it.unipg.bipod.web;

import it.unipg.bipod.applicationLogic.*;
import it.unipg.bipod.dataModel.*;

/**
 * DocenteDatiBean gestisce le attivita' del docente collegate ai suoi dati personali.<br>
 * Permette di modificare e consultare i dati personali del docente.<br>
 * Eventuali messaggi o errori vengono segnalati mediante i metodi forniti da DefaultBean.
 * 
 * @author Lorenzo Porzi
 *
 */
public class DocenteDatiBean extends DefaultBean {
	private DocenteApplication application;
	private Docente docente;
	
	// Proprieta'
	private String email;
	private String nome;
	private String cognome;
	private String ssd;
	private String qualifica;
	
	/**
	 * Costruisce un DocenteBandiBean collegato alla {@link DocenteApplication}
	 * specificata.
	 * 
	 * @param application una DocenteApplication a cui collegare questo oggetto.
	 */
	public DocenteDatiBean(DocenteApplication application) {
		super();
		
		this.application = application;
		this.docente = application.getDocente();
		
		// Iniziallizza le proprietà con i dati del docente
		setEmail(docente.getEmail());
		setNome(docente.getNome());
		setCognome(docente.getCognome());
		setSsd(docente.getSsd());
		setQualifica(docente.getQualifica());
	}
	
	/* ----------------------------------
	 * Getters e setters per le proprietà
	 * ---------------------------------- */
	
	public String getNomeUtente() {
		return docente.getNomeUtente();
	}

	public void setEmail(String email) {
		this.email = email.trim();
	}

	public String getEmail() {
		return email;
	}

	public void setNome(String nome) {
		this.nome = nome.trim();
	}

	public String getNome() {
		return nome;
	}

	public void setCognome(String cognome) {
		this.cognome = cognome.trim();
	}

	public String getCognome() {
		return cognome;
	}

	public void setSsd(String ssd) {
		this.ssd = ssd.trim();
	}

	public String getSsd() {
		return ssd;
	}

	public void setQualifica(String qualifica) {
		this.qualifica = qualifica.trim();
	}

	public String getQualifica() {
		return qualifica;
	}
	
	/* ---------------------
	 * Metodi di navigazione
	 * --------------------- */
	
	/**
	 * Aggiorna i dati del docente salvandoli nella base di dati.
	 * Questo metodo utilizza le seguenti proprieta' di presentation.ini:
     * <ul>
     *   <li><b>msgModificaDatiRiuscita</b>: il messaggio visualizzato quando l'aggiornamento riesce.</li>
     *   <li><b>msgErroreModificaDati</b>: il messaggio visualizzato quando l'aggiornamento fallisce.</li>
     * </ul>
	 */
	public void aggiornaDati() {
		try {
			if (email.equals(docente.getEmail()) && nome.equals(docente.getNome()) && cognome.equals(docente.getCognome()) &&
					ssd.equals(docente.getSsd()) && qualifica.equals(docente.getQualifica()))
				return; // Nessun dato è cambiato
			
			application.modificaDati(email, nome, cognome, ssd, qualifica);
			
			addInfoMessage(getSettings().getProperty("msgModificaDatiRiuscita"));
		} catch (ApplicationException e) {
			addWarnMessage(getSettings().getProperty("msgErroreModificaDati"));
		}
	}
}
